#!/bin/bash

# 端口监控脚本
# 功能：检查3000和5001端口是否有程序运行，如果没有则启动服务

LOG_FILE="/home/Test/log/port_monitor.log"
START_SCRIPT="/home/Test/start.sh"

# 记录日志函数
log_message() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}

# 检查端口是否被占用
check_port() {
    local port=$1
    if netstat -tuln | grep -q ":$port "; then
        return 0  # 端口被占用
    else
        return 1  # 端口未被占用
    fi
}

# 检查进程是否存在
check_process() {
    if [ -f "/home/Test/backend.pid" ] && [ -f "/home/Test/frontend.pid" ]; then
        backend_pid=$(cat /home/Test/backend.pid 2>/dev/null)
        frontend_pid=$(cat /home/Test/frontend.pid 2>/dev/null)
        
        if kill -0 "$backend_pid" 2>/dev/null && kill -0 "$frontend_pid" 2>/dev/null; then
            return 0  # 进程存在
        fi
    fi
    return 1  # 进程不存在
}

log_message "开始端口监控检查..."

# 检查3000端口（前端）和5001端口（后端）
port_3000_active=$(check_port 3000 && echo "true" || echo "false")
port_5001_active=$(check_port 5001 && echo "true" || echo "false")
process_active=$(check_process && echo "true" || echo "false")

log_message "端口状态 - 3000: $port_3000_active, 5001: $port_5001_active, 进程: $process_active"

# 如果任一端口未被占用或进程不存在，则启动服务
if [ "$port_3000_active" = "false" ] || [ "$port_5001_active" = "false" ] || [ "$process_active" = "false" ]; then
    log_message "检测到服务未运行，准备启动服务..."
    
    # 清理可能存在的僵尸进程
    if [ -f "/home/Test/backend.pid" ]; then
        backend_pid=$(cat /home/Test/backend.pid 2>/dev/null)
        if [ -n "$backend_pid" ]; then
            kill -9 "$backend_pid" 2>/dev/null
        fi
        rm -f /home/Test/backend.pid
    fi
    
    if [ -f "/home/Test/frontend.pid" ]; then
        frontend_pid=$(cat /home/Test/frontend.pid 2>/dev/null)
        if [ -n "$frontend_pid" ]; then
            kill -9 "$frontend_pid" 2>/dev/null
        fi
        rm -f /home/Test/frontend.pid
    fi
    
    # 启动服务
    cd /home/Test
    if [ -x "$START_SCRIPT" ]; then
        log_message "执行启动脚本: $START_SCRIPT"
        bash "$START_SCRIPT" >> "$LOG_FILE" 2>&1
        if [ $? -eq 0 ]; then
            log_message "服务启动成功"
        else
            log_message "服务启动失败"
        fi
    else
        log_message "错误: 启动脚本不存在或不可执行: $START_SCRIPT"
    fi
else
    log_message "服务正常运行，无需启动"
fi

log_message "端口监控检查完成"